package com.tiancheng.trade.order.util.ums;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.List;

@Configuration
@ConfigurationProperties(prefix = "ums")
public class UmsBindingBankCardConfig {
    /**
     * 商户号
     */
    private String issCode;
    private String version;

    /**
     * 签名方式，证书方式固定01，请勿改动
     */
    private String signMethod;
    /**
     * 是否验证验签证书的CN，测试环境请设置false，生产环境请设置true。非false的值默认都当true处理。
     */
    private boolean ifValidateCNName;
    /**
     * 是否验证https证书，测试环境请设置false，生产环境建议优先尝试true，不行再false。非true的值默认都当false处理。
     */
    private boolean ifValidateRemoteCert;
    /**
     * 配置文件中验证签名证书目录
     */
    private String validateCertDir;
    /**
     * 后台通知地址，填写接收银联后台通知的地址，必须外网能访问
     */
    private String backUrl;
    /**
     * 签名证书路径，必须使用绝对路径，如果不想使用绝对路径，可以自行实现相对路径获取证书的方法；测试证书所有商户共用开发包中的测试签名证书，生产环境请从cfca下载得到。
     */
    private String signCertPath;
    /**
     * 签名证书密码，测试环境固定000000，生产环境请修改为从cfca下载的正式证书的密码，正式环境证书密码位数需小于等于6位，否则上传到商户服务网站会失败
     */
    private String signCertPwd;
    /**
     * 签名证书密码，测试环境固定000000，生产环境请修改为从cfca下载的正式证书的密码，正式环境证书密码位数需小于等于6位，否则上传到商户服务网站会失败
     */
    private String signCertType;
    /**
     * 敏感信息加密证书路径(商户号开通了商户对敏感信息加密的权限，需要对 卡号accNo，pin和phoneNo，cvn2，expired加密（如果这些上送的话），对敏感信息加密使用)
     */
    private String encryptCertPath;

    /**
     * 前端跳转银联地址
     */
    private String umsServerUrl;

    /**
     * 前端请求银联地址
     *
     * @return
     */
    public String getFrontTransUrl() {
        return umsServerUrl + "frontTransReq.do";
    }

    /**
     * 后端请求银联绑卡地址
     *
     * @return
     */
    public String getBackTransReqUrl() {
        return umsServerUrl + "backTransReq.do";
    }

    /**
     * # Token 预期使用时长,当该字段取值为 010101010101 时，表示 TR（标记请求方，Token Requesor）期望
     *   #该 Token 可使用 1 年 1 月 1 日 1 时 1 分 1 秒。
     *   #1 年默认有 365 天，1 个月默认有 30 天。
     */
    private String tokenExpr;
    /**
     * 单笔 Token 交易的最大交易金额，定长 12 位，最大值为 999999999999，对于不足 12 位的左补 0。
     */
    private String tranLmt;
    /**
     * Token 的可用次数，取值范围：0~9999，0 表示无次数限制，其余为实际限制次数
     */
    private String useNo;
    /**
     * 协议列表
     */
    private List<Agreements> agreements;
    @Data
    public static class Agreements{

        private String title;
        private String url;
    }

    /**
     * 后端查询绑卡请求银联地址
     *
     * @return
     */
    public String getQueryTransUrl() {
        return umsServerUrl + "queryTrans.do";
    }

    public String getIssCode() {
        return issCode;
    }

    public void setIssCode(String issCode) {
        this.issCode = issCode;
    }

    public String getSignMethod() {
        return signMethod;
    }

    public void setSignMethod(String signMethod) {
        this.signMethod = signMethod;
    }

    public boolean isIfValidateCNName() {
        return ifValidateCNName;
    }

    public void setIfValidateCNName(boolean ifValidateCNName) {
        this.ifValidateCNName = ifValidateCNName;
    }

    public boolean isIfValidateRemoteCert() {
        return ifValidateRemoteCert;
    }

    public void setIfValidateRemoteCert(boolean ifValidateRemoteCert) {
        this.ifValidateRemoteCert = ifValidateRemoteCert;
    }

    public String getBackUrl() {
        return backUrl;
    }

    public void setBackUrl(String backUrl) {
        this.backUrl = backUrl;
    }

    public String getSignCertPath() {
        return signCertPath;
    }

    public void setSignCertPath(String signCertPath) {
        this.signCertPath = signCertPath;
    }

    public String getSignCertPwd() {
        return signCertPwd;
    }

    public void setSignCertPwd(String signCertPwd) {
        this.signCertPwd = signCertPwd;
    }

    public String getSignCertType() {
        return signCertType;
    }

    public void setSignCertType(String signCertType) {
        this.signCertType = signCertType;
    }

    public String getEncryptCertPath() {
        return encryptCertPath;
    }

    public void setEncryptCertPath(String encryptCertPath) {
        this.encryptCertPath = encryptCertPath;
    }

    public String getUmsServerUrl() {
        return umsServerUrl;
    }

    public void setUmsServerUrl(String umsServerUrl) {
        this.umsServerUrl = umsServerUrl;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public String getTokenExpr() {
        return tokenExpr;
    }

    public void setTokenExpr(String tokenExpr) {
        this.tokenExpr = tokenExpr;
    }

    public String getTranLmt() {
        return tranLmt;
    }

    public void setTranLmt(String tranLmt) {
        this.tranLmt = tranLmt;
    }

    public String getUseNo() {
        return useNo;
    }

    public void setUseNo(String useNo) {
        this.useNo = useNo;
    }

    public String getValidateCertDir() {
        return validateCertDir;
    }

    public void setValidateCertDir(String validateCertDir) {
        this.validateCertDir = validateCertDir;
    }

    public List<Agreements> getAgreements() {
        return agreements;
    }

    public void setAgreements(List<Agreements> agreements) {
        this.agreements = agreements;
    }
}
